/*!
 * Node-base module v1.0.0 of jRaiser javascript library
 * http://code.google.com/p/jraiser/
 *
 * Author: Heero.Luo
 * Licensed under MIT license
 *
 * Date: Tue Jun 05 2012 10:36:05 GMT+0800
 */
define(function(require, exports, module) { 'use strict';

var core = require('core/1.0.x/core');

// 生成不重复的节点ID
var ID_ATTR_NAME = '_jRaiserNodeId_', rMultiSpace = /\s+/, autoId = 0;

core.extend(exports, {
	/**
	 * 检查对象是否DOM节点
	 * @param {Mixed} 待测对象
	 * @return {Boolean} 待测对象是否DOM节点
	 */
	isNode : function(obj) { return 'nodeType' in obj; },

	/**
	 * 检查节点是否XML节点
	 * @param {DOMElement} 节点
	 * @return {Boolean} 节点是否XML节点
	 */
	isXMLNode : function(node) {
		var docElt = (node.ownerDocument || node).documentElement;
		return docElt ? docElt.nodeName !== 'HTML' : false;
	},

	/**
	 * 检查对象是否window对象
	 * @param {Mixed} 待测对象
	 * @return {Boolean} 待测对象是否window对象
	 */
	isWindow : function(obj) { return obj && typeof obj === 'object' && 'setInterval' in obj; },
	
	/**
	 * 获取节点编号使用的属性名
	 * @return {String} 节点编号使用的属性名
	 */
	uniqueIdAttrName : function() { return ID_ATTR_NAME; },
	
	/**
	 * 生成不重复的节点编号
	 * @param {DOMElement} 节点
	 * @return {Number} 节点编号
	 */
	uniqueId : function(node) {
		// 在IE6-8，如果设置了一个值属性，则此属性会出现在innerHTML中，但对象属性则不会
		var id = node[ID_ATTR_NAME] = node[ID_ATTR_NAME] || new Number(++autoId);
		return id.valueOf();
	},
	
	/**
	 * 把指定字符串以（一个或多个）空格为分隔符分割为数组
	 * @param {String|Array} 字符串（如果传入数组，则不执行分割操作）
	 * @return {Array} 如果数组的长度为0，则返回null，否则返回数组
	 */
	splitBySpace : function(val) {
		if (typeof val === 'string') {
			val = val.split(rMultiSpace);
		}
		
		return val == null || val.length === 0 ? null : val;
	}
});
	
});